#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
void Print(int n)
{
	int dp[100] = { 0 };
	dp[1] = 1;
	for (int i = 1; i <= n; i++)
	{
		for (int j = i; j >= 1; j--)
		{
			dp[j] = dp[j - 1] + dp[j];
		}
		for (int j = 1; j <= i; j++) printf("%d ", dp[j]);
		printf("\n");
	}
}
int main()
{
	int n;
	scanf("%d", &n);
	Print(n);
	return 0;
}
//int main()
//{
//	char des;
//	for (des = 'A'; des <= 'D'; des++)
//	{
//		if ((des != 'A') + (des == 'C') + (des == 'D') + (des != 'D') == 3) {
//			printf("%c ", des);
//		}
//	}
//	return 0;
//}
//int find(int a[][3], int x, int y, int pos)
//{
//	int i = 0, j = y - 1;
//	while (j >= 0 && i < x)
//	{
//		if (a[i][j] > pos) --j;
//		else if (a[i][j] < pos) ++i;
//		else return 1;
//	}
//	return 0;
//}
//int main()
//{
//	int a[][3] = { {1,3,5},{3,5,7},{5,7,9} };
//	printf("%d", find(a, 3, 3, 1));
//	return 0;
//}
//int check(char* a, char* b)
//{
//	size_t lena = strlen(a);
//	char tmp[256] = { 0 };
//	strcpy(tmp, a);
//	strcpy(tmp + lena, a);
//	if (strstr(tmp, b) != NULL) return 1;
//	else return 0;
//}
//int main()
//{
//	char a[100] = { 0 };
//	char b[100] = { 0 };
//	scanf("%s%s", a, b);
//	printf("%d", check(a, b));
//	return 0;
//}
//void bubble_sort(int arr[],int sz)
//{
//	for (int i = 0; i < sz - 1; i++)
//	{
//		int flag = 0;
//		for (int j = 0; j < sz - 1 - i; j++)
//		{
//			if (arr[j] > arr[j + 1]) {
//				flag = 1;
//				int tmp = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = tmp;
//			}
//		}
//		if (!flag) break;
//	}
//}
//int main()
//{
//	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	bubble_sort(arr, sz);
//	for (int i = 0; i < sz; i++) printf("%d ", *(arr + i));
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d ", *(arr + i));
//	}
//	return 0;
//}